package chapters18;

import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * Created by xinxuchu on 2020/2/5.
 *
 * 多线程的定时任务执行服务示例
 *
 * 与timerTask相比，多个线程执行，不用担心后面的线程被前面线程影响
 * 单个定时任务的异常不会再导致整个定时任务被取消，即使后台只有一个线程执行任务
 */
public class ScheduleFixedDelay {

    static class LongRunningTask extends TimerTask {

        @Override
        public void run(){
            try {
                Thread.sleep(5000);
            }catch (InterruptedException e){

            }
            System.out.println("long running finished!");
        }
    }

    static class FixedDelayTask extends TimerTask{

        @Override
        public void run(){
            System.out.println(System.currentTimeMillis());//时间long类型的数据
        }
    }

//        TimeUnit  时间粒度转换
//        TimeUnit.DAYS          //天
//        TimeUnit.HOURS         //小时
//        TimeUnit.MINUTES       //分钟
//        TimeUnit.SECONDS       //秒
//        TimeUnit.MILLISECONDS  //毫秒
//        TimeUnit.NANOSECONDS   //毫微秒
//        TimeUnit.MICROSECONDS  //微秒

    public static void main(String[] args) {
        ScheduledExecutorService timer = Executors.newScheduledThreadPool(10);
        timer.schedule(new LongRunningTask(),10, TimeUnit.MILLISECONDS);
        timer.scheduleWithFixedDelay(new FixedDelayTask(),100,1000,TimeUnit.MILLISECONDS);
    }
}
